package com.example.springbootcaffeinedemo.common;
import com.github.benmanes.caffeine.cache.Cache;
import com.github.benmanes.caffeine.cache.Caffeine;
import java.util.concurrent.TimeUnit;

/**
 * Created by IntelliJ IDEA2022.3.2
 * @Author: Tenghw
 * @Date: 2023/04/17  19:19
 * @Description: 缓存添加策略之手动加载
 */
public class CaffeineCacheAddPolicy1 {
    public static void main(String[] args) {
        // 1、初始化缓存，设置1分钟的写过期时间；缓存最大个数为100
        Cache<Integer, Integer> cache = Caffeine.newBuilder()
                .expireAfterWrite(1, TimeUnit.MINUTES)
                .maximumSize(100)
                .build();

        int key=1;
        // 2、获取
        // ①使用getIfPresent()方法从缓存中获取值；如果缓存中不存在，则方法返回null
        System.out.println("2不存在值，返回null: " +cache.getIfPresent(key));

        // ②也可使用get()方法获取值，该方法将一个参数为key的Function作为参数传入。
        // 如果缓存中不存在该key，则该函数将提供默认值，该值在计算后插入缓存中：如下设置默认值=2
        //System.out.println("2返回默认值: " +cache.get(key, a->2));
        System.out.println("2返回默认值: " +cache.get(key, a->{
            System.out.println("a: "+a); //这里的a就是key的值
            return 2;
        }));

        // 校验key对应的value是否插入缓存中
        System.out.println("2返回key对应的value：" + cache.getIfPresent(key));

        // 3、手动put，数据填充至缓存中
        int value=3;
        cache.put(key,value);
        System.out.println("3返回key对应的value：" + cache.getIfPresent(key));

        // 4、移除数据
        cache.invalidate(key);
        System.out.println("4返回key对应的value：" + cache.getIfPresent(key));
    }
}
